"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/5/23 9:30
@Description : 

类中的类方法和静态方法特点:
1. 类方法和静态方法均可以通过实例对象访问
2. 类方法定义时需要通过@classmethod 修饰 且需要传入参数 cls
3. 静态函数定义时需要通过@staticmethod修饰   不要要传入self  cls作为默认参数
4. 类方法和静态方法可以直接通过类名访问  (推荐)
5. 静态方法多见于工具类设计
"""
import hashlib
import string
import random


class Student:

    def __init__(self, name, age):
        self.name = name
        self.age = age

    #  实例函数    需要有默认的self参数  否则报错
    def fn1(self):
        print('这是一个实例函数', self)

    @staticmethod  # 声明该函数时一个静态函数  静态函数定义时可以不在声明  self  cls等默认参数
    def fn2():
        print('这是类中的静态方法')

    @staticmethod
    def fn3(info):
        print('这是类中的一个静态方法，参数是', info)


# 函数访问
student = Student('admin', 30)
# 通过实例访问静态方法
student.fn2()
# 通过类访问静态方法
Student.fn2()
Student.fn3('admin')


# 自定义工具类
class CustomerUtil:

    @staticmethod
    def md5(password):
        return hashlib.md5(password.encode('utf-8')).hexdigest()

    @staticmethod
    def rand_string(length):
        long_str = string.ascii_uppercase + string.digits + string.ascii_lowercase
        result = ''.join(random.choices(long_str, k=length))
        return result

# 密码加密
password = '123456'
password = CustomerUtil.md5(password)
print(password)

# 获取随机秘钥
secret = CustomerUtil.rand_string(8)
print(secret)
